import config from '@/config/index.js'

/**
 * 处理头像URL - 用于无需权限验证的头像图片
 * @param {string} url - 头像URL地址
 * @returns {string} - 返回完整的头像URL
 * @description 
 * 1. 如果URL为空，返回默认头像
 * 2. 如果是微信临时头像(http://tmp开头)，直接返回
 * 3. 如果是其他完整http URL，直接返回
 * 4. 如果是相对路径，拼接baseURL后返回
 * 注意：头像图片不需要权限验证，直接使用此方法处理
 */
export function getAvatarUrl(url) {
  if (!url) return '/static/default-avatar.png'
  
  // 微信临时头像URL，直接返回
  if (url.startsWith('http://tmp') || url.startsWith('wxfile://')) {
    console.log('微信临时头像:', url)
    return url
  }
  
  // 如果是完整的http URL，直接返回
  if (url.startsWith('http')) {
    console.log('完整URL头像:', url)
    return url
  }
  
  // 如果是base64格式，直接返回
  if (url.startsWith('data:image')) {
    console.log('base64格式头像')
    return url
  }
  
  // 头像使用相对路径，需要拼接baseURL
  const fullUrl = `${config.baseURL}${url}`
  console.log('拼接后的头像URL:', fullUrl)
  return fullUrl
}

const imageCache = new Map();

/**
 * 获取图片文件流并转换为blob URL - 用于需要权限验证的照片
 * @param {string} url - 图片URL地址
 * @returns {Promise<string>} - 返回blob URL或空字符串
 * @description
 * 1. 如果URL为空或非字符串，返回空字符串
 * 2. 如果是完整的http URL，直接返回
 * 3. 否则请求图片文件流并转换为blob URL
 * 4. 请求失败时返回空字符串
 * 注意：此方法用于需要权限验证的照片，会自动添加token进行认证
 */
export async function getImageBlob(url) {
  if (!url || typeof url !== 'string') return ''
  if (url.startsWith('http')) {
    return url
  }
  
  // 检查缓存
  if (imageCache.has(url)) {
    return imageCache.get(url);
  }
  
  try {
    const fullUrl = `${config.baseURL}${url}`
    return new Promise((resolve, reject) => {
      uni.downloadFile({
        url: fullUrl,
        header: {
          'Authorization': 'Bearer ' + uni.getStorageSync('token')
        },
        success: (res) => {
          if (res.statusCode === 200) {
            // 缓存结果
            imageCache.set(url, res.tempFilePath);
            resolve(res.tempFilePath);
          } else {
            reject(new Error(`下载失败: ${res.statusCode}`));
          }
        },
        fail: reject
      });
    });
  } catch (error) {
    console.error('获取图片失败:', error)
    return ''
  }
}